// https://www.cnblogs.com/jym-sunshine/p/5096711.html
export function getCurrentDate() {
  return new Date(new Date().toLocaleDateString())
}

export function getCurrentDay() {
  let startStop = new Array()
  const currentDate = getCurrentDate()

  const millisecond = 1000 * 60 * 60 * 24

  const start = new Date(currentDate.getTime())
  const stop = new Date(start.getTime() + (millisecond - 1))

  startStop.push(start)
  startStop.push(stop)

  return startStop
}

/***
 * 获得本周起止时间
 */
export function getCurrentWeek(){
  //起止日期数组
  var startStop = new Array();
  //获取当前时间
  var currentDate = getCurrentDate();
  //返回date是一周中的某一天
  var week = currentDate.getDay();
  //返回date是一个月中的某一天
  var month = currentDate.getDate();

  //一天的毫秒数
  var millisecond = 1000 * 60 * 60 * 24;
  //减去的天数
  var minusDay = week != 0 ? week - 1 : 6;
  //alert(minusDay);
  //本周 周一
  var monday = new Date(currentDate.getTime() - (minusDay * millisecond));
  //本周 周日
  var sunday = new Date(monday.getTime() + (6 * millisecond) + (millisecond - 1));
  //添加本周时间
  startStop.push(monday); //本周起始时间
  //添加本周最后一天时间
  startStop.push(sunday); //本周终止时间
  //返回
  return startStop;
}

/***
 * 获得本月的起止时间
 */
export function getCurrentMonth() {
  //起止日期数组
  var startStop = new Array();
  //获取当前时间
  var currentDate = getCurrentDate();
  //获得当前月份0-11
  var currentMonth = currentDate.getMonth();
  //获得当前年份4位年
  var currentYear = currentDate.getFullYear();
  //求出本月第一天
  var firstDay = new Date(currentYear, currentMonth, 1);


  //当为12月的时候年份需要加1
  //月份需要更新为0 也就是下一年的第一个月
  if (currentMonth == 11) {
    currentYear++;
    currentMonth = 0; //就为
  } else {
    //否则只是月份增加,以便求的下一月的第一天
    currentMonth++;
  }


  //一天的毫秒数
  var millisecond = 1000 * 60 * 60 * 24;
  //下月的第一天
  var nextMonthDayOne = new Date(currentYear, currentMonth, 1);
  //求出上月的最后一天
  var lastDay = new Date(nextMonthDayOne.getTime() - millisecond + (millisecond - 1));

  //添加至数组中返回
  startStop.push(firstDay);
  startStop.push(lastDay);
  //返回
  return startStop;
}

/**
 * 返回上一个月的第一天Date类型
 * @param year 年
 * @param month 月
 */
function getPriorMonthFirstDay(year, month) {
  //年份为0代表,是本年的第一月,所以不能减
  if (month == 0) {
    month = 11; //月份为上年的最后月份
    year--; //年份减1
    return new Date(year, month, 1);
  }
  //否则,只减去月份
  month--;
  return new Date(year, month, 1); ;
};

/**
 * 获得该月的天数
 * @param year年份
 * @param month月份
 */
function getMonthDays(year, month) {
  //本月第一天 1-31
  var relativeDate = new Date(year, month, 1);
  //获得当前月份0-11
  var relativeMonth = relativeDate.getMonth();
  //获得当前年份4位年
  var relativeYear = relativeDate.getFullYear();

  //当为12月的时候年份需要加1
  //月份需要更新为0 也就是下一年的第一个月
  if (relativeMonth == 11) {
    relativeYear++;
    relativeMonth = 0;
  } else {
    //否则只是月份增加,以便求的下一月的第一天
    relativeMonth++;
  }
  //一天的毫秒数
  var millisecond = 1000 * 60 * 60 * 24;
  //下月的第一天
  var nextMonthDayOne = new Date(relativeYear, relativeMonth, 1);
  //返回得到上月的最后一天,也就是本月总天数
  return new Date(nextMonthDayOne.getTime() - millisecond).getDate();
}

/**
 * 获得上一月的起止日期
 */
export function getLastMonth() {
  //起止日期数组
  var startStop = new Array();
  //获取当前时间
  var currentDate = getCurrentDate();
  //获得当前月份0-11
  var currentMonth = currentDate.getMonth();
  //获得当前年份4位年
  var currentYear = currentDate.getFullYear();
  //获得上一个月的第一天
  var priorMonthFirstDay = getPriorMonthFirstDay(currentYear, currentMonth);
  //获得上一月的最后一天
  var priorMonthLastDay = new Date(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth(), getMonthDays(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth()));
  //一天的毫秒数
  var millisecond = 1000 * 60 * 60 * 24
  var priorMonthLastDayTimestamp = new Date(priorMonthLastDay.getTime() + millisecond - 1)
  //添加至数组
  startStop.push(priorMonthFirstDay);
  startStop.push(priorMonthLastDayTimestamp);
  //返回
  return startStop;
}

export default { getCurrentDay, getCurrentWeek, getCurrentMonth, getLastMonth }
